package com.class06.controller;


import jakarta.servlet.ServletContext;
import jakarta.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class SharedDomainObjectController {
//    SpringMVC 响应浏览器几种方式
//    1. 返回字符串
//    2.返回ModelAndView
//    3.静态网页
//    需要注意：不能加@ResponseBody注解，否则返回的不是视图名称而是数据
//    4.重定向/转发




//    测试跳转静态网页
//    localhost:8866/testHtml
    @RequestMapping("/testHtml")
    public  String testHtml(){
        return "testStaticPage";
    }


//    一、request 对象属性共享域 Model 、ModelMap 、 ModelAndView 、Map
//    会话对象共享域 、应用对象共享域
//    localhost:8866/testModel
    @RequestMapping("/testModel")
    public String testModel(Model model){
        model.addAttribute("name","小明");
        return "testModel";

    }
//    测试ModelMap
    @RequestMapping("/testModelMap")
    public String testModelMap(ModelMap modelMap){
        modelMap.addAttribute("name","小明");
        return "testModel";

    }

//    测试ModelAndView
    @RequestMapping("/testModelAndView")
    public ModelAndView testModelAndView(){
        ModelAndView mv = new ModelAndView();
        mv.addObject("name","小明");
        mv.setViewName("testModel");
        return mv;
    }

//    会话对象共享域 Thymeleaf中会话对象共享域session
    @RequestMapping("/testSession")
    public String testSession(HttpSession session){
        session.setAttribute("name","小明");
//        session.getAttribute("name");
        return "testSession";

    }


//    应用对象共享域 Thymeleaf中应用对象共享域application
    @Autowired
    private ServletContext servletContext;

    @RequestMapping("/testApplication")
    public String testApplication(){
        servletContext.setAttribute("name","小明");
        return "testSession";

    }


//    转发和重定向的区别？
//    转发：浏览器地址栏不变、转发是一次请求 ,服务器内部行为
//    request.getRequestDispatcher("xxx").forward(request,response);
//    重定向：浏览器地址栏改变、重定向是两次请求
//    response.sendRedirect("xxx");
//


//    测试转发
//    转发时可以在资源名前面加上forward: + 资源名
//    也可以简写省略forward: 直接写资源名
    @RequestMapping("/testForward")
    public String testForward(){
        return "forward:/testHtml";
    }

//    测试重定向
//    重定向时可以在资源名前面加上redirect: + 资源名
    @RequestMapping("/testRedirect")
    public String testRedirect(){
         return  "redirect:https://www.baidu.com/";
    }
//    访问图片时，直接访问图片路径即可 如同：http://localhost:8866/img.png




}
